﻿using System;
using System.Collections.Generic;
using Object = UnityEngine.Object;

namespace DL
{
    [Obsolete("该黑板作为第一代黑板系统，存在大量拆装箱，已被弃用。")]
    public class GameBlackboard_old : Singleton<GameBlackboard_old>
    {
        
        private Dictionary<string, object> m_GameData = new Dictionary<string, object>();
        
        public void SetGameData<T>(string dataName, T value) where T : Object
        {
            m_GameData[dataName] = value;
        }
        
        public T GetGameData<T>(string dataName) where T : Object
        {
            if (m_GameData.TryGetValue(dataName, out var e))
            {
                if(e is T data) return data;
                // return e as T;
            }
            return default(T);
            //泛型T的返回类型比object更具有类型的安全性，因为在调用设置方法时需要说明指定的类型，从而直接转换为该类型
            //而用object你需要显式转换：(类型)object，如果这个e根本就不是这个类型就会发生报错
            //这里的T是一个引用类型，那么存入的值也必须是引用类型
            //如果想让T既可以为值、也可以为引用，那么需要if(e is T data) return data; 来进行转化，as只能支持引用类型的转化
        }
        
    }
}